package day12;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

//测试定长线程池
public
class TestFixed {
    public static
    void main(String[] args) {
//        ExecutorService es= Executors.newFixedThreadPool(3);
//        for (int i=0;i<10;i++){
//            es.submit(()->{
//                System.out.println(Thread.currentThread().getName()+"执行任务");
//                try {
//                    Thread.sleep(3000);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            });
//        }
//        es.shutdown();//关闭线程池 但是不会立即关闭线程池，会等待所有任务执行完毕，关闭线程池

        //有一个餐厅 需要做5盘菜 只有3个灶台
        //最后统计完成的菜品的时间
        String[] names={"辣椒炒肉","宫保鸡丁","鱼香肉丝","花甲粉","香菇炖鸡"};
        long[] times={1000,3000,5000,5000,2000};
        ExecutorService es= Executors.newFixedThreadPool(3);
        //开始时间
        long start=System.currentTimeMillis();
        for (int i=0;i<names.length;i++){
            long time=times[i];
            String name=names[i];
            es.submit(()->{
                System.out.println("开始做:"+name);
                try {
                    Thread.sleep(time);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("已经做好："+name);
            });
        }
        es.shutdown();//结束时间 一定线程池关闭 而且里面的任务都执行完毕
        //用于判断线程池里面的任务是否执行完毕 没有返回false 有返回true
        //isTerminated() 线程池关闭了 且里面的任务都执行完毕了 才会返回true
        while (!es.isTerminated()){
        }
        long end=System.currentTimeMillis();
        System.out.println("总耗时："+(end-start));
    }
}
